home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 3.2 / Ham Radio Version 3.2 (Chestnut CD-ROMs)(1993).ISO / mods / caty-767 / y767disp.pas < prev    next >
Pascal/Delphi Source File  |  1989-10-31  |  16KB  |  416 lines

  1. UNIT Y767DISP (* Y767 Display routines  D. J. Wilke N3HGQ 09/26/89 *);
  2.  
  3. INTERFACE
  4.  
  5. USES CRT, DOS, Y767GLO, Y767UTIL;
  6.  
  7. PROCEDURE PrFKeys;
  8. PROCEDURE PrMessage(Mstring : String86; Tc : INTEGER);
  9. PROCEDURE PrFrame (LeftCol,RightCol,TopRow,BottomRow : INTEGER);
  10. PROCEDURE PrLines(Dir : STRING; X,X1,Y,Y1,Fg,Bg,Ch : INTEGER);
  11. PROCEDURE PrRule;
  12. PROCEDURE PrBox;
  13. PROCEDURE PrFreq (Update : String86; ByteNo,Col,Row : INTEGER);
  14. PROCEDURE PrMode (Param : String86; ByteNo,Col,Row : INTEGER);
  15. PROCEDURE PrCTCSS(Param : String86; ByteNo,Col,Row : INTEGER);
  16. PROCEDURE PrMem(Sb,Eb,SR,FC,MC,TC : INTEGER);
  17. PROCEDURE PrStatusByte;
  18. PROCEDURE PrBandLimits;
  19. PROCEDURE PrDfPage(Pg,Rec,Nlines : INTEGER);
  20.  
  21. IMPLEMENTATION
  22.  
  23. (*▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓*)
  24. PROCEDURE PrFKeys (* Display Function keys on line 25 *);
  25.  
  26. BEGIN (* PrFKeys *)
  27.     ScreenWrite('1 DF'+CHR(26)+'Mem',1,25,FKA);
  28.     ScreenWrite('2 DF'+CHR(26)+'VFO',10,25,FKA);
  29.     ScreenWrite('3 '+CHR(25)+'Band',19,25,FKA);
  30.     ScreenWrite('4 '+CHR(24)+'Band',27,25,FKA);
  31.     ScreenWrite('5 Splt'+CHR(18),35,25,FKA);
  32.     ScreenWrite('6 Clar'+CHR(29),43,25,FKA);
  33.     ScreenWrite('7 M'+CHR(26)+'VFO',51,25,FKA);
  34.     ScreenWrite('8 VFO'+CHR(26)+'M',59,25,FKA);
  35.     ScreenWrite('9 Swap*',67,25,FKA);
  36.     ScreenWrite('0 Exit',75,25,FKA);
  37. END; (* PrFKeys *)
  38.  
  39. (*▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓*)
  40. PROCEDURE PrMessage(Mstring : String86; Tc : INTEGER);
  41. (* Display message at line Tc centered horizontally *)
  42.  
  43. VAR
  44.     Lc : INTEGER;
  45.  
  46. BEGIN (* PrMessage *)
  47.     TEXTCOLOR(DFG);
  48.     TEXTBACKGROUND(DBG);                     (* Default screen colors *)
  49.     GOTOXY(40 - (LENGTH(Mstring) DIV 2) + 1,Tc);
  50.     WRITE(Mstring);                          (* Display Message centered *) 
  51. END; (* PrMessage *)
  52.  
  53. (*▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓*)
  54. PROCEDURE PrFrame (LeftCol,RightCol,TopRow,BottomRow : INTEGER);
  55. (* Draw basic screen frame using graphics characters *)
  56.  
  57. VAR
  58.     Vert,HorizLength : INTEGER;
  59.  
  60. BEGIN (* PrFrame *)
  61.     (* Do the corners *)
  62.     ScreenWrite(CHR(201),LeftCol,TopRow,SBA);
  63.     ScreenWrite(CHR(187),RightCol,TopRow,SBA);
  64.     ScreenWrite(CHR(200),LeftCol,BottomRow,SBA);
  65.     ScreenWrite(CHR(188),RightCol,BottomRow,SBA);
  66.  
  67.     (* Do the vertical lines *)
  68.     FOR Vert := TopRow + 1 TO BottomRow - 1 DO
  69.     BEGIN
  70.         ScreenWrite(CHR(186),LeftCol,Vert,SBA);
  71.         ScreenWrite(CHR(186),RightCol,Vert,SBA);
  72.     END;
  73.  
  74.     (* Do the horizontal lines *)
  75.     HorizLength := RightCol - LeftCol - 1;
  76.     FOR Index := 1 TO HorizLength DO BEGIN
  77.         ScreenWrite(CHR(205),Index + 1,TopRow,SBA);
  78.         ScreenWrite(CHR(205),Index + 1,BottomRow,SBA);
  79.     END; (* FOR Index *)
  80. END; (* PrFrame *)
  81.  
  82. (*▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓*)
  83. PROCEDURE PrLines(Dir : STRING; X,X1,Y,Y1,Fg,Bg,Ch : INTEGER);
  84. (* Draw horiz or vert ruling lines *)
  85.  
  86. BEGIN (* PrLines *)                          (* Ch=graphics character *)
  87.     IF Dir = 'H' THEN BEGIN                  (* Draw horiz line *)
  88.         FOR Index := X TO X1 DO              (* X=start col, X1=end col *)
  89.             ScreenWrite(CHR(Ch),Index,Y,Fg); (* Draw @row Y, in color Fg *)
  90.     END; (* IF Dir *)
  91.     IF Dir = 'V' THEN BEGIN                  (* Draw vert line *)
  92.         FOR Index := Y TO Y1 DO              (* Y=start row, Y1=end row *)
  93.             ScreenWrite(CHR(Ch),X,Index,Fg); (* Draw @col X, in color Fg *)
  94.     END; (* IF Dir *)
  95. END; (* PrLines *)
  96.  
  97. (*▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓*)
  98. PROCEDURE PrRule (* Display ruled lines at top of screen *);
  99.  
  100. BEGIN (* PrRule *)
  101.     ScreenWrite(CHR(204),1,5,SBA);           (* Dbl tee, left *)
  102.     PrLines('H',2,79,5,0,SBA,DBG,205);       (* Dbl H line, top *)
  103.     ScreenWrite(CHR(185),80,5,SBA);          (* Dbl tee, right *)
  104. END; (* PrRule *)
  105.  
  106. (*▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓*)
  107. PROCEDURE PrBox (* Display selected parameter box *);
  108.     (* Note: ABSOLUTE positions, not relative to window *)
  109.  
  110. BEGIN (* PrBox *)
  111.     ScreenWrite(CHR(201),57,7,SBA);          (* Dbl corner, UL *)
  112.     PrLines('H',58,74,7,0,SBA,DBG,205);      (* Top dbl line, box *)
  113.     ScreenWrite(CHR(187),75,7,SBA);          (* Dbl corner, UR *)
  114.     ScreenWrite(CHR(186),57,8,SBA);          (* Dbl V line, left *)
  115.     ScreenWrite(CHR(186),75,8,SBA);          (* Dbl V line, right *)
  116.     ScreenWrite(CHR(200),57,9,SBA);          (* Dbl corner, LL *)
  117.     PrLines('H',58,74,9,0,SBA,DBG,205);      (* Bot dbl line, box *)
  118.     ScreenWrite(CHR(188),75,9,SBA);          (* Dbl corner, LR *)
  119. END;
  120.  
  121. (*▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓*)
  122. PROCEDURE PrFreq (Update : String86; ByteNo,Col,Row : INTEGER);
  123. (* Decode and Display VFO, Operating & Memory frequencies *)
  124.  
  125. VAR
  126.     S    : STRING[2];
  127.     Temp : STRING[8];
  128.     Freq : REAL;
  129.     Code : INTEGER;
  130.  
  131. BEGIN (* PrFreq *)
  132.     Temp := '';
  133.     TEXTCOLOR(SFG);
  134.     IF Col <> 8 THEN
  135.         TEXTBACKGROUND(DBG)                  (* Returned status colors *)
  136.     ELSE
  137.         TEXTBACKGROUND(BLUE);                (* Special status colors *)
  138.     GOTOXY(Col,Row);
  139.     FOR Index := ByteNo TO ByteNo + 3 DO BEGIN (* Grab the 4 Freq bytes *)
  140.         STR(Bin2BCDHex(ORD(Update[Index])),S);(* Make string of BCD Hex *)
  141.         IF LENGTH(S) < 2 THEN
  142.             S := '0' + S;                    (* Must have leading zero *)
  143.         Temp := Temp + S;                    (* Build 8 byte Temp string *)
  144.     END; (* FOR Index *)
  145.     VAL(Temp,Freq,Code);                     (* Convert to REAL number *)
  146.     WRITE((Freq/100000):9:5);                (* Display 5 decimal places *)
  147.     IF Col > 8 THEN BEGIN
  148.         TEXTCOLOR(DFG);
  149.         TEXTBACKGROUND(DBG);             (* Default screen colors *)
  150.         GOTOXY(Col+10,Row); WRITE('MHz.');
  151.     END (* IF Col *)
  152.     ELSE WRITE(' ');
  153.     TEXTCOLOR(DFG);
  154.     TEXTBACKGROUND(DBG);                     (* Default screen colors *)
  155. END; (* PrFreq *)
  156.  
  157. (*▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓*)
  158. PROCEDURE PrMode (Param : String86; ByteNo,Col,Row : INTEGER);
  159. (* Decode and Display modes *)
  160.  
  161. VAR
  162.     Mode     : INTEGER;
  163.     ModeByte : CHAR;
  164.  
  165. BEGIN (* PrMode *)
  166.     IF Row = 4 THEN BEGIN
  167.         TEXTCOLOR(SFG);
  168.         TEXTBACKGROUND(BLUE);                (* Special status colors *)
  169.     END (* IF *)
  170.     ELSE BEGIN
  171.         TEXTCOLOR(SFG);
  172.         TEXTBACKGROUND(DBG);                 (* Returned status colors *)
  173.     END; (* ELSE *)
  174.     ModeByte := Param[ByteNo];               (* nth byte of Update stream *)
  175.     Mode     := Bin2BCDHex(ORD(ModeByte) AND 7); (* Mask off Mode bits *)
  176.     GOTOXY(Col,Row);
  177.     CASE Mode OF
  178.         0 : WRITE('LSB');
  179.         1 : WRITE('USB');
  180.         2 : WRITE(' CW');
  181.         3 : WRITE(' AM');
  182.         4 : WRITE(' FM');
  183.         5 : WRITE('FSK');
  184.     END; (* CASE *)
  185.     TEXTCOLOR(DFG);
  186.     TEXTBACKGROUND(DBG);                     (* Default screen colors *)
  187. END; (* PrMode *)
  188.  
  189. (*▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓*)
  190. PROCEDURE PrCTCSS(Param : String86; ByteNo,Col,Row : INTEGER);
  191. (* Decode and Display CTCSS tone frequencies *)
  192.  
  193. VAR
  194.     Tone  : INTEGER;
  195.     CTCSS : REAL;
  196.  
  197. BEGIN (* PrCTCSS *)
  198.     Tone := ORD(Param[ByteNo]);              (* nth byte of Update stream *)
  199.     IF (Tone < 33) OR (Tone > 62) THEN
  200.         CTCSS := 0;
  201.     CASE Tone OF
  202.         21     : CTCSS := 91.5;              (* 15h *)
  203.         22     : CTCSS := 88.5;
  204.         23     : CTCSS := 85.4;
  205.         24     : CTCSS := 82.5;
  206.         25     : CTCSS := 79.7;
  207.         26     : CTCSS := 77.0;
  208.         27     : CTCSS := 74.7;
  209.         28     : CTCSS := 71.9;
  210.         29     : CTCSS := 67.0;
  211.         30     : CTCSS := 250.3;
  212.         31     : CTCSS := 241.8;
  213.         32     : CTCSS := 233.6;
  214.         33     : CTCSS := 225.7;             (* 21h *)
  215.         34     : CTCSS := 218.1;
  216.         35     : CTCSS := 210.7;
  217.         36     : CTCSS := 203.5;
  218.         37     : CTCSS := 192.8;
  219.         38     : CTCSS := 186.2;
  220.         39     : CTCSS := 179.9;
  221.         40     : CTCSS := 173.8;
  222.         41     : CTCSS := 167.9;
  223.         42     : CTCSS := 162.2;
  224.         43     : CTCSS := 156.7;
  225.         44     : CTCSS := 151.4;
  226.         45     : CTCSS := 146.2;
  227.         46     : CTCSS := 141.3;
  228.         47     : CTCSS := 136.5;
  229.         48     : CTCSS := 131.8;
  230.         49     : CTCSS := 127.3;
  231.         50     : CTCSS := 123.0;
  232.         51     : CTCSS := 118.8;
  233.         52     : CTCSS := 114.8;
  234.         53     : CTCSS := 110.9;
  235.         54     : CTCSS := 107.2;
  236.         55     : CTCSS := 103.5;
  237.         56     : CTCSS := 100.0;
  238.         57     : CTCSS := 94.8;
  239.         58     : CTCSS := 88.5;
  240.         59     : CTCSS := 82.5;
  241.         60     : CTCSS := 77.0;
  242.         61     : CTCSS := 71.9;
  243.         62     : CTCSS := 67.0;
  244.     END; (* CASE *)
  245.     TEXTCOLOR(SFG);
  246.     TEXTBACKGROUND(DBG);                     (* Returned status colors *)
  247.     GOTOXY(Col,Row);
  248.     IF ToneEnc THEN BEGIN                    (* Is CTCSS bd installed? *)
  249.         WRITE(CTCSS:3:1);
  250.         TEXTCOLOR(DFG);
  251.         TEXTBACKGROUND(DBG);                 (* Default screen colors *)
  252.         GOTOXY(Col + 7,Row); WRITE ('Hz.');
  253.     END
  254.     ELSE BEGIN
  255.         TEXTCOLOR(SFG);
  256.         TEXTBACKGROUND(DBG);             (* Returned status colors *)
  257.         WRITE ('   None   ');            (* No CTCSS board installed *)
  258.     END; (* ELSE *)
  259.     TEXTCOLOR(DFG);
  260.     TEXTBACKGROUND(DBG);                     (* Default screen colors *)
  261. END; (* PrCTCSS *)
  262.  
  263. (*▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓*)
  264. PROCEDURE PrMem(Sb,Eb,SR,FC,MC,TC : INTEGER);
  265. (* Decode & display memory Frequencies, Mode, Tone
  266.     Sb = Start byte in Update
  267.     Eb = Ending byte in Update
  268.     SR = Starting screen row
  269.     FC = Frequency column
  270.     MC = Mode column
  271.     TC = CTCSS tone column *)
  272.  
  273. BEGIN (* PrMem *)
  274.     IF LENGTH(Update) = 86 THEN BEGIN
  275.         WHILE Sb <= Eb DO BEGIN
  276.             PrFreq(Update,Sb,FC,SR);
  277.             PrMode(Update,Sb + 5,MC,SR);
  278.             PrCTCSS(Update,Sb + 4,TC,SR);
  279.             SR := SR + 1;
  280.             Sb := Sb + 6;
  281.         END; (* WHILE *)
  282.     END; (* IF LENGTH *)
  283. END; (* PrMem *)
  284.  
  285. (*▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓*)
  286. PROCEDURE PrStatusByte (* Decode and Display status byte *);
  287.  
  288. VAR
  289.     SBStr : STRING[8];
  290.     PTT,HamGen,TXInh,Split,VFO,MemR,Clar,CATS : INTEGER;
  291.  
  292. BEGIN (* PrStatusByte *)
  293.     PTT    := Bin2BCDHex(ORD(Update[1]) AND $1); (* Mask off PTT bit *)
  294.     HamGen := Bin2BCDHex(ORD(Update[1]) AND $2); (* Mask off H/G bit *)
  295.     TXInh  := Bin2BCDHex(ORD(Update[1]) AND $4); (* Mask off T/R bit *)
  296.     Split  := Bin2BCDHex(ORD(Update[1]) AND $8); (* Mask off Split bit *)
  297.     VFO    := Bin2BCDHex(ORD(Update[1]) AND $10); (* Mask off VFO bit *)
  298.     MemR   := Bin2BCDHex(ORD(Update[1]) AND $20); (* Mask off MR bit *)
  299.     Clar   := Bin2BCDHex(ORD(Update[1]) AND $40); (* Mask off Clar bit *)
  300.     CATS   := Bin2BCDHex(ORD(Update[1]) AND $80); (* Mask off CatS bit *)
  301.  
  302.     TEXTCOLOR(SFG);
  303.     TEXTBACKGROUND(DBG);                     (* Returned status colors *)
  304.     GOTOXY(65,11);
  305.     IF PTT <> 0 THEN WRITE('Transmit')
  306.     ELSE WRITE('Receive ');
  307.     GOTOXY(65,12);
  308.     IF HamGen <> 0 THEN WRITE('Gen Coverage')
  309.     ELSE WRITE('Ham Bands');
  310.     GOTOXY(65,13);
  311.     IF TXInh <> 0 THEN WRITE('Inhibited')
  312.     ELSE WRITE('Enabled  ');
  313.     GOTOXY(65,14);
  314.     IF Split <> 0 THEN WRITE('Active   ')
  315.     ELSE WRITE('Inactive ');
  316.     GOTOXY(65,15);
  317.     IF VFO <> 0 THEN WRITE(' < B >   ')
  318.     ELSE WRITE(' < A >   ');
  319.     GOTOXY(65,16);
  320.     IF MemR <> 0 THEN WRITE('Active   ')
  321.     ELSE WRITE('Inactive ');
  322.     GOTOXY(65,17);
  323.     IF Clar <> 0 THEN WRITE('Active   ')
  324.     ELSE WRITE('Inactive ');
  325.     GOTOXY(65,18);
  326.     IF CATS <> 0 THEN WRITE('Active   ')
  327.     ELSE WRITE('Inactive ');
  328. END; (* PrStatusByte *)
  329.  
  330. (*▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓*)
  331. PROCEDURE PrBandLimits;
  332. (* Display legal band boundaries & transmitter limits *)
  333.  
  334. BEGIN (* PrBandLimits *)
  335.     (* Display Ham Band limits headings *)
  336.     GOTOXY(14,5); WRITE ('Band');
  337.     GOTOXY(27,5); WRITE ('Legal Band Limits');
  338.     GOTOXY(50,5); WRITE ('Transmitter Band Limits');
  339.     PrLines('H',6,75,11,11,SBA,DBG,196);     (* Display divider line *)
  340.     TEXTCOLOR(RFG);
  341.     TEXTBACKGROUND(DBG);                     (* Requested parameter colors *)
  342.     GOTOXY(10,7); WRITE('160 Meters      1.800 -   2.000 MHz.');
  343.     GOTOXY(52,7); WRITE('1.5 -   1.99999 MHz.');
  344.     GOTOXY(11,8); WRITE('80 Meters      3.500 -   4.000 MHz.');
  345.     GOTOXY(52,8); WRITE('3.5 -   3.99999 MHz.');
  346.     GOTOXY(11,9); WRITE('40 Meters      7.000 -   7.300 MHz.');
  347.     GOTOXY(52,9); WRITE('7.0 -   7.49999 MHz.');
  348.     GOTOXY(11,10); WRITE('30 Meters     10.000 -  10.150 MHz.');
  349.     GOTOXY(51,10); WRITE('10.0 -  10.49999 MHz.');
  350.     GOTOXY(11,11); WRITE('20 Meters     14.000 -  14.350 MHz.');
  351.     GOTOXY(51,11); WRITE('14.0 -  14.49999 MHz.');
  352.     GOTOXY(11,12); WRITE('17 Meters     18.068 -  18.168 MHz.');
  353.     GOTOXY(51,12); WRITE('18.0 -  18.49999 MHz.');
  354.     GOTOXY(11,13); WRITE('15 Meters     21.000 -  21.450 MHz.');
  355.     GOTOXY(51,13); WRITE('21.0 -  21.49999 MHz.');
  356.     GOTOXY(11,14); WRITE('12 Meters     24.890 -  24.990 MHz.');
  357.     GOTOXY(51,14); WRITE('24.0 -  24.99999 MHz.');
  358.     GOTOXY(11,15); WRITE('10 Meters     28.000 -  29.700 MHz.');
  359.     GOTOXY(51,15); WRITE('28.0 -  29.99999 MHz.');
  360.     GOTOXY(11,16); WRITE(' 6 Meters     50.000 -  54.000 MHz.');
  361.     GOTOXY(51,16); WRITE('50.0 -  53.99999 MHz.');
  362.     GOTOXY(11,17); WRITE(' 2 Meters    144.000 - 148.000 MHz.');
  363.     GOTOXY(50,17); WRITE('144.0 - 147.99999 MHz.');
  364.     GOTOXY(11,18); WRITE('70 Cm.       420.000 - 450.000 MHz.');
  365.     GOTOXY(50,18); WRITE('430.0 - 439.99999 MHz.');
  366. END; (* PrBandLimits *)
  367.  
  368. (*▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓*)
  369. PROCEDURE PrDfPage(Pg,Rec,Nlines : INTEGER);
  370. (* Display Nlines records at a time from datafile *)
  371.  
  372. VAR
  373.     Item       : INTEGER;
  374.     Mode       : CHAR;
  375.     Freq,Offset,
  376.     Desc       : STRING;
  377.     ModeStr    : STRING[3];
  378.     LineOfData : STRING[70];
  379.  
  380. BEGIN (* PrDfPage *)
  381.     FOR Index := 1 TO Nlines DO BEGIN
  382.         Freq       := '';
  383.         Offset     := '';
  384.         Mode       := ' ';
  385.         Desc       := '';
  386.         LineOfData := '';
  387.         IF Rec = 0 THEN BEGIN                (* No Rec # means do a page *)
  388.             Item := Pg * 10 + Index;
  389.             GOTOXY(2,Index);
  390.         END
  391.         ELSE BEGIN                           (* Rec # means do specific record *)
  392.             Item := Rec;
  393.             IF Item MOD(10) = 0 THEN GOTOXY(2,Item MOD(10) +10)
  394.             ELSE GOTOXY(2,Item MOD(10));
  395.         END;
  396.         Freq   := COPY(MemArray[Item],15,7);
  397.         Offset := MemArray[Item,23];
  398.         Mode   := MemArray[Item,13];
  399.         Desc   := COPY(MemArray[Item],25,44);
  400.         CASE Mode OF
  401.             'L' : ModeStr := 'LSB';
  402.             'U' : ModeStr := 'USB';
  403.             'C' : ModeStr := 'CW ';
  404.             'A' : ModeStr := 'AM ';
  405.             'K' : ModeStr := 'FSK';
  406.             'F' : ModeStr := 'FM ';
  407.         END; (* CASE *)
  408.         LineOfData := '';
  409.         LineOfData := '   ' +Freq +'   ' +Offset +'   ' +ModeStr +'  ' +Desc;
  410.         WRITE(Item:3);
  411.         IF LENGTH(LineOfData) >= 34 THEN WRITE(LineOfData);
  412.     END; (* FOR Index *)
  413. END; (* PrDfPage *)
  414.  
  415. END (* of UNIT Y767DISP *).
  416.